JQuery实现一个筛选数据的功能
撰写时间: 2019-09-20 总共: 1475 字 转载请注明: BY-SA 4.0(除特别声明或转载文章外)
前言
目的为了给我的博客标签页添加按标签数据进行筛选。
基于jekyll的博客。
实现效果:
标签页代码(再说)
自定义了一个数据:data-filter = “*” ,代表所有列表都显示。data-filter=”.” 以标签名作为要过滤的类名。
具体流程是这样的:
1. 定义筛选数据
根据标签名生成的按钮组
data-filter="."
<button data-filter="."></button>
2. 给循环渲染出来的每个标签列表添加类名,以标签名作为类名
<section class="zero-grid-item ">...</section>
3. 进行JQuery的筛选。
正好复习一下JQuery的遍历
// 返回选择元素的直接子元素
children()
// 返回被选择元素的第一个元素
first()
// 返回拥有一个或多个元素在内的所有元素
has()
// 返回所选元素的直接父元素
parent()
// 根据需要匹配的选择器过滤元素返回
filter()
// 与filter相对,返回不符合的元素
not()
它们接受一些匹配的规则返回一些元素集合。
具体的实现:
$(document).ready(function () {
$('#zero-filter').children().click(function(){
// 获取自定义的属性
var data_filter = $(this).attr("data-filter");
// 重复点击时取消这个标签的激活和切换到全部
if ($(this).hasClass("active") && data_filter!=='*') {
$(this).removeClass("active");
$("#zero-filterItem").children().removeClass("hidden").fadeIn();
return $('#zero-filter button').first().addClass("active");
}
// 移除所有已经选择过的按钮 active
$("#zero-filter").children().removeClass("active");
// 如果点击的当前按钮不是所有
if(data_filter!=='*' && !$(this).hasClass("active")){
// 将过滤具体的标签列表选择返回符合的项目
// 移除隐藏的类名
// 显示出来。
$("#zero-filterItem")
.children()
.filter(data_filter)
.removeClass("hidden")
.fadeIn();
/*
不符合条件的添加隐藏的类名
移除出去
*/
$("#zero-filterItem")
.children()
.not(data_filter)
.addClass("hidden")
.fadeOut();
// 给这个按钮一个激活状态
return $(this).addClass("active");
}else if(data_filter==='*') {
// 如果是全部就移除所有的隐藏显示出来
$("#zero-filterItem")
.children()
.removeClass("hidden")
.fadeIn();
return $(this).addClass("active");
}
});});
总结
综合使用了JQuery的遍历DOM进行元素的操作,包括获取筛选的元素,添加类名,移除类名,使用自定义属性值以进行筛选。